home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / System / lpDaemon SRC / lpd Headers / PAP.H < prev    next >
Text File  |  1993-02-12  |  5KB  |  213 lines

  1. /************************************************************************
  2.  *                                                                        *
  3.  * PAP.H  Definitions for Printer Access Protocol                        *
  4.  *                                                                        *
  5.  ************************************************************************/
  6.  
  7.  
  8. #ifndef __APPLETALK__
  9. #include <appletalk.h>
  10. #endif
  11.  
  12. #if 0
  13.  
  14. #define PAP_OPEN_TIMEOUT        2*60     /* 2 seconds */
  15. #define PAP_OPEN_RETRIES        5         /* as per spec */
  16.  
  17. #define PAP_CLOSE_TIMEOUT        5*60     /* 5 seconds */
  18. #define PAP_CLOSE_RETRIES        3         /*  */
  19.  
  20. #define PAP_CONNECTION_TIMEOUT    2*60*60     /* 2 minutes */
  21. #define PAP_TICKLE_TIMEOUT        60*60     /* 1 minute */
  22. #define PAP_TICKLE_RETRIES        255         /* retry count of infinity */
  23.  
  24. #define PAP_READ_TIMEOUT        15*60     /* 15 seconds */
  25. #define PAP_READ_RETRIES        255         /* retry count of infinity */
  26.  
  27. #define PAP_ARBITRATION_TIME    2*60     /* two seconds */
  28.  
  29. #define PAP_SHUT_WRITE    0x01
  30. #define PAP_SHUT_READ    0x02
  31. #define PAP_SHUT_ALL    0x04
  32.  
  33. #endif
  34.  
  35. #define PAPSegSize        512
  36. #define min_PAPpkt_size    (lapSize+ddpSize+atpSize)
  37.  
  38.  
  39. enum{                        /* PAP message codes */
  40.     papOpenConn = 1,
  41.     papOpenConnReply,
  42.     papSendData,
  43.     papData,
  44.     papTickle,
  45.     papCloseConn,
  46.     papCloseConnReply,
  47.     papSendStatus,
  48.     papStatusReply
  49.     };
  50.  
  51.  
  52. typedef struct PAPStatusRec
  53.     {
  54.     Byte        atpRSkt;            /* responding socket */
  55.     Byte        flowQ;                /* flow quantum */
  56.     Word        result;                /* result of operation */
  57.     Str255        statusStr;            /* the status string */
  58.     } PAPStatusRec, *PAPStatusPtr;
  59.  
  60. #if 0
  61. typedef struct SendDataCredit
  62.     {
  63.     Boolean            valid;            /* is this a valid credit record */
  64.     Byte            socket;            /* which socket is it for */
  65.     Word            transID;        /* transaction identifier for this credit */
  66.     integer            credit;
  67.     } SDC;
  68.  
  69. typedef struct PAPWriteRecord
  70.     {
  71.     Boolean            valid;
  72.     Boolean            active;
  73.     BDSElement        bds[8];
  74.     ATPParamBlock    abr;
  75.     integer            *wstate;    /* also called comp */
  76.     integer            cno;
  77.     } PWR;
  78.  
  79. typedef struct PAPReadRecord
  80.     {
  81.     integer            valid;
  82.     BDSElement        bds[8];
  83.     ATPParamBlock    abr;
  84.     integer            *eof;
  85.     integer            *rstate;    /* also called comp */
  86.     integer            *size;
  87.     integer            numBDS;
  88.     } PRR;
  89.  
  90.  
  91. typedef struct PAP_Socket
  92.     {
  93.     integer            active;        /* active flag */
  94.     integer            state;        /* state of the socket */
  95.  
  96.     integer            rRSkt;        /* remote responding socket */
  97.     integer            rFlowQ;        /* remote flow quantum */
  98.     integer            papUSeq;    /* remote pap data request sequence used */
  99.     integer            papRSeq;    /* remote pap data request sequence received */
  100.  
  101.     integer            flowQ;        /* our flow quantum */
  102.     integer            papSeq;        /* our pap data request sequence */
  103.     integer            papRSkt;    /* our responding socket */
  104.  
  105.     Byte            connID;        /* connection ID number */
  106.  
  107.     PRR                prr;        /* read request */
  108.     PWR                pwr;        /* write request */
  109.     SDC                sdc;        /* outstanding sdc */
  110.  
  111.     ATPParamBlock    requestAbr;
  112.     integer            reqActive;
  113.  
  114.     ATPParamBlock    abr;
  115.     BDSElement        bds[1];
  116.  
  117.     LongInt            wtime;        /* last tickle time */
  118.     PAPStatusRec    po, por;
  119.     PAPStatusPtr    status;
  120.     integer            *ostate;
  121.  
  122.     integer            tstate;
  123.  
  124.     AddrBlock        addr;
  125.     Word            transID;
  126.     } PAP_Socket;
  127.  
  128. typedef struct gnj_queue
  129.     {
  130.     QElemPtr        qLink;
  131.     integer            qType;
  132.  
  133.     integer            used_entry;
  134.     PAP_Socket        *ps;
  135.     } gnjQElem, *gnjQElemPtr;
  136.  
  137. typedef struct PAP_S_Socket
  138.     {
  139.     integer            active;
  140.     integer            state;
  141.     integer            arbState;
  142.     integer            resskt;
  143.     integer            flowQ;
  144.     PAPStatusPtr    status;
  145.     ATPParamBlock    abr;
  146.     NamesTableEntry    name;
  147.     QHdr            gnj_q;
  148.     PAPStatusRec    pap;
  149.     } PAP_S_Socket;
  150.  
  151. #endif
  152.  
  153. typedef struct {
  154.     Byte        connID;            /* connection ID */
  155.     Byte        PAPtype;        /* type of PAP packet */
  156.     union    {
  157.         struct    {
  158.             Byte    eof;        /* eof in data (Tresp) */
  159.             Byte    unused;        /* */
  160.             } std;
  161.         Word    seqNo;            /* send data sequence number */
  162.         } other;
  163.     } PAPUserBytes;
  164.  
  165. #if 0
  166.  
  167. #define    PAP_UNUSED        -1
  168. #define    PAP_BLOCKED        0
  169. #define    PAP_UNBLOCKED    1
  170. #define    PAP_WAITING        2
  171. #define    PAP_ARBITRATE    3
  172.  
  173. #define PAP_CLOSED        0
  174. #define PAP_OPENED        1
  175. #define PAP_INACTIVE    3
  176. #define    PAP_OPENING        4
  177. #define    PAP_GNJOPENING    5
  178. #define PAP_GNJFOUND    6
  179.  
  180. #define nextPAPseq(x)    ( (x) = ((++(x) % 65535) == 0 ) ? 1 : (x) % 65535 )
  181.  
  182. #define NUMPAP    6
  183. #define NUMSPAP    6
  184.  
  185. #endif
  186.  
  187.  
  188. /* Routines for PAP common to servers and clients */
  189. Handle PAPLoad(void);
  190. OSErr PAPUnload(void);
  191. OSErr PAPRead(integer refNum, Ptr data, integer *size,
  192.                                         integer *eof, integer *rstate);
  193. OSErr PAPWrite(integer refNum, Ptr data, integer size,
  194.                                         integer eof, integer *wstate);
  195. OSErr PAPClose(integer refNum);
  196.  
  197. #if 0
  198. /* Routines for PAP for servers */
  199. OSErr SLInit(integer *sRef, EntityName *printerName,
  200.                         integer flowQuantum, PAPStatusRec *status);
  201. OSErr SLClose(integer sRef);
  202. OSErr PAPRegName(integer sRef, EntityPtr printer);
  203. OSErr PAPRemName(integer sRef, EntityPtr printer);
  204. OSErr GetNextJob(integer sRef, integer *refNum, integer *jstate);
  205. OSErr HeresStatus(integer sRef, PAPStatusRec *status);
  206. #endif
  207.  
  208. /* Routines for PAP for clients */
  209. OSErr PAPStatus(EntityPtr printer,
  210.                             PAPStatusRec *status, AddrBlock *prtAddr);
  211. OSErr PAPOpen(integer *refNum, EntityPtr printer,
  212.                 integer flowQuantum, PAPStatusRec *status, integer *ostate);
  213.